/**
 * Generali Solutions d'assurances - Tous droits rï¿½servï¿½s &copy; 2007 - 2010
 */
package fr.generali.accueilclient.referentiel.assembler;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.core.convert.converter.Converter;

import fr.generali.accueilclient.referentiel.ReferentielEnum;
import fr.generali.accueilclient.utils.tuple.Couple;
import fr.generali.refservcommuns.rce.referentiel.valeurs.list.transco.ListValeursContextTranso;
import fr.generali.refservcommuns.rce.referentiel.valeurs.list.transco.ValeurTransco;

/**
 * @author Guillaume Lancelin
 */

public class ListValeursContextTranso2MapConverter implements
                Converter<ListValeursContextTranso, Couple<ReferentielEnum, Map<String, String>>> {

    /**
     * {@inheritDoc}
     */
    public Couple<ReferentielEnum, Map<String, String>> convert(ListValeursContextTranso input) {
        Couple<ReferentielEnum, Map<String, String>> couple = null;

        // Bilan sinistre
        if ("BILANSINISTRE".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.BILAN_SINISTRE, input);
        }

        // Devise
        if ("DEVISE".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.DEVISE, input);
        }

        // Indicateur sinistre grave
        if ("INDGRAVSINISTRE".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.INDICATEUR_SINISTRE_GRAVE, input);
        }

        // Responsabilitï¿½ sinistre
        if ("RESPSINISTRE".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.RESPONSABILITE_SINISTRE, input);
        }

        // Statut contrat
        if ("CTRSITC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.STATUT_CONTRAT, input);
        }

        // Statut sinistre
        if ("STATUTSINISTRE".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.STATUT_SINISTRE, input);
        }

        // Type recours sinistre
        if ("TYPERECOURS".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.TYPE_RECOURS_SINISTRE, input);
        }

        // Type site gestion sinistre
        if ("TYPESITEGESTION".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.TYPE_SITE_GESTION_SINISTRE, input);
        }

        // Nature de recouvrement
        if ("CTRNREC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.NATURE_RECOUVREMENT, input);
        }

        // Mode de prelevement
        if ("CTRMREC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.PRELEVEMENT, input);
        }

        // Fractionnement
        if ("CTRFRAC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.FRACTIONNEMENT, input);
        }

        // Type dernier avenant
        if ("CTRINTC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.TYPE_DERNIER_AVENANT, input);
        }

        // Libelle Compagnie
        if ("CTRCIEC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.CODE_COMPAGNIE, input);
        }

        // Nature contrat
        if ("CTRNATC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.NATURE_CONTRAT, input);
        }

        // Motif fin activite
        if ("CTRCESC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.MOTIF_FIN_ACTIVITE, input);
        }

        // Mode de gestion
        if ("CTRMGEC".equals(input.getContexteTransco().getCodeContext())) {
            couple = buildCouple(ReferentielEnum.MODE_DE_GESTION, input);
        }

        return couple;
    }

    /**
     * Construit le couple (rï¿½fï¿½rentiel, liste de valeurs) quand on prend toutes
     * les valeurs renvoyï¿½es par le service
     * 
     * @param referentiel le rï¿½fï¿½rentiel
     * @param input un {@link ListValeursContextTranso} fourni par le service
     * @return le couple (rï¿½fï¿½rentiel, liste de valeurs)
     */
    private Couple<ReferentielEnum, Map<String, String>> buildCouple(ReferentielEnum referentiel,
                    ListValeursContextTranso input) {
        Map<String, String> liste = buildListe(input);

        return new Couple<ReferentielEnum, Map<String, String>>(referentiel, liste);
    }

    /**
     * Construit la liste des rï¿½fï¿½rences quand on les prend toutes
     * 
     * @param input un {@link ListValeursContextTranso} fourni par le service
     * @return la liste des rï¿½fï¿½rences
     */
    private Map<String, String> buildListe(ListValeursContextTranso input) {
        List<ValeurTransco> valeurParamTableListe = input.getValeurTransco();
        Map<String, String> liste = new HashMap<String, String>(valeurParamTableListe.size());
        for (int i = 0; i < valeurParamTableListe.size(); i++) {
            ValeurTransco valeurTransco = valeurParamTableListe.get(i);
            liste.put(valeurTransco.getCodeEnum(), valeurTransco.getLibelleEnum());
        }

        return liste;
    }
}
